package fr.dauphine.bookstore.filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import fr.dauphine.bookstore.frontoffice.SessionUtil;
import fr.dauphine.bookstore.modele.User;

/**
 * Filtre du Back Office<br>
 * L'utilisateur doit etre administrateur pour y acceder.
 */
public final class BackOfficeFilter implements Filter {

	/**
	 * Execution du filtre.
	 * 
	 * @param request
	 *            Requete
	 * @param response
	 *            Reponse
	 * @param chain
	 *            Filtres suivants
	 * @throws ServletException
	 *             Erreur de servlet
	 * @throws IOException
	 *             Erreur d'entree/sortie
	 */
	public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
		HttpSession session = ((HttpServletRequest) request).getSession();
		User user = SessionUtil.getUser(session);

		// L'utilisateur peut acceder au back office
		if (user != null && user.getAdmin()) {
			chain.doFilter(request, response);

			// Il ne peut pas y acceder
		} else {
			request.getRequestDispatcher("forbidden.jsp").forward(request, response);
		}
	}

	/**
	 * Destruction du filtre.
	 */
	public void destroy() {
	}

	/**
	 * Initialisation du filtre.
	 * 
	 * @param config
	 *            Configuration
	 * @throws ServletException
	 *             Erreur de servlet
	 */
	public void init(final FilterConfig config) throws ServletException {
	}
}
